package T02_InserBigDateType;

import T00_Utils.JDBCUtils;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;

/**
 * 一、回顾与复习
 * 1.flush的作用
 *   ①.flush() 方法是用来刷新缓冲区的，即将缓冲区中的数据立刻写入文件，同时清空缓冲区，
 *      不需要是被动的等待输出缓冲区写入。
 *   ②.一般情况下，文件关闭后会自动刷新缓冲区，但有时你需要在关闭前刷新它，这时就可以使用
 *      flush() 方法。
 * 2.FileInputStream读取文件是显示未找到文件
 *   情况一:如果在main方法中使用FileInputStream 读取的位置时 项目下的文件 并不是文件文件下的模块
 *   情况二:在测试方法中读取的是本模块下的资源 两者有细微的差别
 *
 * 二、新知识
 * 1.向数据表中插入Blob类型的数据
 *
 * 2.插入Blob字段特殊情况的说明
 *   1.关于photo类型的字段 ----  mediumblob 类型
 *     mediumblob类型的大小----  16M
 *     正常推理也就是图片只要不大于16M就能放到数据库里边
 *     经过尝试以后发现！mysql默认插入图片的大小不能大于1kb,当然不同版本间也有不同
 *     8.0的默认是4MB的
 */
public class InserBigDateType {

    //复习 关于配置文件读取事变的问题
    //FileInputStream 读取文件失败的问题
    public static void main(String[] args) {
        try {
            FileInputStream fis=new FileInputStream("xhg.jpg");
            System.out.println(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    @Test
    public  void T01() {
        try {
            FileInputStream fis=new FileInputStream("xhg.jpg");
            System.out.println(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    //1.向数据表中插入Blob类型的数据
    @Test
    public void test01(){
        try {
            //获取连接
            Connection connection= JDBCUtils.getConnection();
            String sql="insert into customers(name,email,birth,photo) values(?,?,?,?)";
            PreparedStatement ps=connection.prepareStatement(sql);
            //填充占位符
            ps.setString(1,"徐风年");
            ps.setString(2,"xhq@126.com");
            ps.setDate(3,new Date(new java.util.Date().getTime()));
            //操作Blob类型的变量
            FileInputStream fis=new FileInputStream("xhg.jpg");
            ps.setBlob(4,fis);
            //执行
            ps.execute();
            fis.close();
            JDBCUtils.closeResource(connection,ps);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //2.向数据表中插入Blob类型的数据
    @Test
    public void test02(){
        try {
            //获取连接
            Connection connection= JDBCUtils.getConnection();
            String sql="insert into customers(name,email,birth,photo) values(?,?,?,?)";
            PreparedStatement ps=connection.prepareStatement(sql);
            //填充占位符
            ps.setString(1,"徐骁");
            ps.setString(2,"xuxiao@126.com");
            ps.setDate(3,new Date(new java.util.Date().getTime()));
            //操作Blob类型的变量
            FileInputStream fis=new FileInputStream(new File("xhg.jpg"));
            ps.setBlob(4,fis);
            //执行
            ps.execute();
            fis.close();
            JDBCUtils.closeResource(connection,ps);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



}
